package com.wandar.gc;

import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.wandar.gc.config.Config;
import com.wandar.gc.core.DBConnection;
import com.wandar.gc.handler.ConfigHandler;
import com.wandar.gc.schema.ConfigSchema;
import com.wandar.gc.schema.EntitySchema;
import com.wandar.gc.schema.PropertySchema;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

/**
 * @author huangxm
 * 
 */
public class Main {
	
	
	
	/**
	 * @param args
	 * @throws IOException
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public static void main(String[] args) throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		
		Connection connection = DBConnection.getConnection();
		List<PropertySchema> schema = ConfigHandler.getPropertySchema(connection, Config.databaseName, Config.tableName);
		
		EntitySchema entitySchema = new EntitySchema();
		entitySchema.setPropertys(schema);
		entitySchema.setTableName(Config.tableName);
		
		
		ConfigSchema config = new ConfigSchema();
		config.setEntityName(Config.entityName);
		config.setEntitySchema(entitySchema);
		config.setTableName(Config.tableName);
		

		Map<String, Object> datas = new HashMap<String, Object>();
		
		System.out.println("-------------info-----------------");
		datas.put("info", config);
		System.out.println("-------------model-----------------");
		analysisTemplate("model.ftl",datas);
		System.out.println("-------------mapper-----------------");
		analysisTemplate("mapper.ftl",datas);
		System.out.println("-------------mapperjava-----------------");
		analysisTemplate("mapperjava.ftl",datas);
		System.out.println("-------------query-----------------");
		analysisTemplate("query.ftl",datas);
		System.out.println("-------------interface-----------------");
		analysisTemplate("node1/interface.ftl",datas);
		System.out.println("-------------services-----------------");
		analysisTemplate("node1/services.ftl",datas);
		System.out.println("-------------controller-----------------");
		analysisTemplate("node1/controller.ftl",datas);
	}
	
	
	
	public static void analysisTemplate(String templateName,Map<?, ?> datas) {
		try {
			
			String templatePath = Main.class.getResource("/template").getPath();
			
			// 初使化FreeMarker配置s
			Configuration config = new Configuration();
			
			// 设置要解析的模板所在的目录，并加载模板文件
			config.setDirectoryForTemplateLoading(new File(templatePath));
			
			// 设置包装器，并将对象包装为数据模型
			config.setObjectWrapper(new DefaultObjectWrapper());
			
			// 获取模板,并设置编码方式，这个编码必须要与页面中的编码格式一致
			// 否则会出现乱码
			Template template = config.getTemplate(templateName, "UTF-8");
			
			
			// 合并数据模型与模板
			template.process(datas, new OutputStreamWriter(System.out));
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
			e.printStackTrace();
		}
	}
	

}
